package com.itheima.controller;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.common.R;
import com.itheima.entity.Category;
import com.itheima.entity.Employee;
import com.itheima.service.ICategoryService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;
import java.util.List;


@Slf4j
@RestController
@RequestMapping("/category")
public class CategoryController {

    //    业务层注入
    @Autowired
    private ICategoryService categoryService;

    //    接口一：新增分类
    @PostMapping
    public R<String> save(@RequestBody Category category, HttpSession session) {
        log.info("category新增功能启动，接收前端JSON数据:{}", category);
//        category新增功能启动，接收前端JSON数据:
//        Category(id=null, type=1, name=111, sort=1,
//        createTime=null, updateTime=null,
//        createUser=null, updateUser=null)


        categoryService.save(category);
        return R.success("菜品添加成功");
    }


//    接口二：分类分页查询

    /**
     * 请求url地址： /category/page?page=1&pageSize=10
     * 请求方式：GET
     * 请求参数：?page=1&pageSize=10
     * 响应结果【格式统一】：R 对象
     * {
     * "code":  0 失败  1 成功,
     * "data":{
     * "records":[], //列表数据
     * "total":100 //总记录数
     * },
     * "msg":null
     * }
     */
    @GetMapping("/page")
    public R<Page> queryPageAndSize(Integer page, Integer pageSize) {
        log.info("测试分页查询接收信息： page = {} ，pageSize = {}", page, pageSize);
//        创建分页查询对象
        Page pageInto = new Page<>();
//        创建条件对象
        LambdaQueryWrapper<Category> wrapper = new LambdaQueryWrapper<>();
//        根据ID降序
        wrapper.orderByAsc(Category::getId);
        categoryService.page(pageInto, wrapper);
        return R.success(pageInto);
    }


//    接口三：删除分类

    /**
     * 请求url地址： /category ?id=1504008529740996610
     * 请求方式：DELETE
     * 请求参数：?id=1504008529740996610
     * <p>
     * 响应结果【格式统一】：R 对象
     * <p>
     * {
     * "code":  0 失败  1 成功,
     * "data":"删除成功",
     * "msg":null
     * }
     */
    @DeleteMapping()
    public R<String> deleteById(Long id) {

    //1、检查当前分类下是否有对应的菜品
    // SELECT COUNT(*) FROM `dish` WHERE category_id = 1397844263642378242
    // 结果大于0 ，则不能删除  代码结束 return R.error("当前分类下有菜品，不能删除")

    //2、检查当前分类下是否有对应的套餐
    // SELECT COUNT(*) FROM `setmeal` WHERE category_id= 1397844263642378242
    //结果大于0 ，则不能删除  代码结束 return R.error("当前分类下有套餐，不能删除")

    //3、可以删除,则调用mapper直接删除 categoryMapper.deleteById(id);


//        此处MybatisPlus已经无法满足删除需求
        categoryService.deleteByIdDishCustom(id);

        log.info("category删除功能，获取ID：{}", id);
        return R.success("删除成功");
    }

//   接口一：根据id查询分类数据，进行数据回显

    @PutMapping
    public R<String> update(@RequestBody Category category){

        categoryService.updateById(category);
        return R.success("修改成功");
    }


//    接口三：新增菜品功能开发
    /**
     * 接口1：查询菜品分类列表数据
     * 请求url地址：/category/list ?type=1
     * 请求方式：GET
     * 请求参数：?type=1
     * 响应结果【格式统一】：R 对象
     * json
     * {
     *     "code":  0 失败  1 成功,
     *     "data":[], //菜品分类列表
     *     "msg":null
     * }
     */

    @GetMapping("/list")
    public R<List<Category>> list(Category category){
//        此处的要求是读取到菜品的分类内容，然后传输到页面上
//        此处页面传输的type是1或者2，代表的是菜品分类和套餐分类，需要对这个进行处理
//        确保页面精准显示具体的分类信息
//        创建条件查询
        LambdaQueryWrapper<Category> wrapper  = new LambdaQueryWrapper<>();
//        先确认type不为null，因为这里使用的是Integer，所以StringUitl是不适用的
        wrapper.eq(category.getType()!=null,Category::getType,category.getType());
//        排序
        wrapper.orderByAsc(Category::getSort).orderByDesc(Category::getUpdateTime);

        List<Category> list = categoryService.list(wrapper);
//        log.info("此处测试list读取的内容：{}",list);

        return R.success(list);
    }
}
